package controle;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

import servicos.FornecedorRN;
import servicos.FalhaDeDeletarExcepiton;
import servicos.FalhaDeInclusaoException;

import dominio.Fornecedor;

@ManagedBean(name = "FornecedorMB")
public class FornecedorManagedBean {

	private FornecedorRN cadastro = new FornecedorRN();
	private Fornecedor fornecedor = new Fornecedor();
	private List<Fornecedor> fornecedorSelecionado = new ArrayList<Fornecedor>(); 

	private boolean cpf = false;
	private boolean cnpj = false;

	// GET DO FORNECEDOR
	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	// SET DO FORNECEDOR
	public void setFornecedor(Fornecedor Fornecedor) {
		this.fornecedor = Fornecedor;
	}

	// GET E SET DO CPF
	public boolean isCpf() {
		return cpf;
	}

	public void setCpf(boolean cpf) {
		this.cpf = cpf;
	}

	// GET E SET DO CNPJ
	public boolean isCnpj() {
		return cnpj;
	}

	public void setCnpj(boolean cnpj) {
		this.cnpj = cnpj;
	}

	// METODO PARA LISTAR FornecedorS
	public List<Fornecedor> getListarFornecedor() {
		try {
			return cadastro.listar();

		} catch (FalhaDeInclusaoException e) {
			e.printStackTrace();

			return null;

		}
	}

	// METODO PARA SALVAR FORNECEDOR
	public String salvarFornecedor() {

		try {
			cadastro.salvar(fornecedor);

			return "/paginas/fornecedor/fornecedor_salvo.xhtml";
		} catch (FalhaDeInclusaoException e) {
			e.printStackTrace();
		}

		return "falha";
	}

	// METODO PARA DELETAR FORNECEDOR
	public String deletarFornecedor() {
		try {

			cadastro.deletar(fornecedor);

			return "/paginas/fornecedor/listar_fornecedors.xhtml";
		} catch (FalhaDeDeletarExcepiton e) {
			e.printStackTrace();
		}
		return "Falha";
	}

	// METODO VISUALIZAR FORNECEDOR
	public String VisualizarFornecedor() {

		if (fornecedor.getCnpj() == null) {
			cnpj = false;
			cpf = true;
		} else {
			cnpj = true;
			cpf = false;
		}

		return "/paginas/fornecedor/visualizar_fornecedor.xhtml";
	}

	// METODO QUE QUESTINA A EXCLUSAO DO FORNECEDOR
	public String confirmarDeletar() {
		if (fornecedor.getCnpj() == null) {
			cnpj = false;
			cpf = true;

		} else {
			cnpj = true;
			cpf = false;

		}
		return "/paginas/fornecedor/excluir_fornecedor.xhtml";
	}

	// METODO PARA ALTERAR FORNECEDOR
	public String alterarFornecedor() {
		if (fornecedor.getCnpj() != null) {

			return "/paginas/fornecedor/alterar_fornecedor_cnpj.xhtml";

		} else {

			return "/paginas/fornecedor/alterar_fornecedor_cpf.xhtml";

		}
	}

	// METODO PARA RENDEREIZAR O FORMULARIO DE CPF
	public void escolheCpf(ActionEvent e) {
		cpf = true;
		cnpj = false;
	}

	// METODO PARA RENDERIZAR O FORMULARIO DE CNPJ
	public void escolheCnpj(ActionEvent e) {
		cpf = false;
		cnpj = true;
	}

	public List<Fornecedor> getFornecedorSelecionado() {
		return fornecedorSelecionado;
	}

	public void setFornecedorSelecionado(List<Fornecedor> fornecedorSelecionado) {
		this.fornecedorSelecionado = fornecedorSelecionado;
	}
	
	public List<Fornecedor> selecionaNome(String query) throws FalhaDeInclusaoException{
		query = query.toUpperCase(); 
		
		this.fornecedorSelecionado = cadastro.listar(); 
		List<Fornecedor> sugestao = new ArrayList<Fornecedor>(); 
		for(Fornecedor f : this.fornecedorSelecionado){
			if(f.getNomeRazaoSocial().startsWith(query)){
				sugestao.add(f);
			}
		}
		return sugestao; 
	}

}
